﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using KPWeb.Class;
using KPWeb.Data;
using KPWeb.Function;

namespace KPWeb.Moje
{
    public partial class Ankiety : KPPage
    {
        private short RodzajAnkietySondazu
        {

            get
            {
                return short.Parse(ViewState["RodzajAnkietySondazu"].ToString());
            }
            set
            {
                ViewState["RodzajAnkietySondazu"] = value;

            }
        }

        private int AnkietaID
        {

            get
            {
                return short.Parse(ViewState["AnkietaID"].ToString());
            }
            set
            {
                ViewState["AnkietaID"] = value;

            }
        }
        private bool CzyWybory
        {

            get
            {
                return bool.Parse(ViewState["CzyWybory"].ToString());
            }
            set
            {
                ViewState["CzyWybory"] = value;

            }
        }
     
        private int LiczbaWybieranychOsob
        {

            get
            {
                return short.Parse(ViewState["LiczbaWybieranychOsob"].ToString());
            }
            set
            {
                ViewState["LiczbaWybieranychOsob"] = value;

            }
        }
       
        private bool WyborDokladnie //true dokładnie; false conajwyzej
        {

            get
            {
                return bool.Parse(ViewState["WyborDokladnie"].ToString());
            }
            set
            {
                ViewState["WyborDokladnie"] = value;

            }
        }
 
        private void komunikatError(int kod)//, int iT, int iID)
        {
            fError.Visible = true;
            switch (kod)
            {
                case -1: Error1.Visible = true;
                    break;
                case -2: Error2.Visible = true;
                    break;
                case -3: Error3.Visible = true;
                    break;

                default: fError.Visible = false;
                    break;
            }
        }


        public void InitPytaniaData(int ankietaSondazID,int osobaID,bool czyZapisywac,bool czyWybory )// 13,14 wybory
        {
            var lPytania1 = Model.GetAnkietaSondazPytania(ankietaSondazID, osobaID);
            var lPytania2 = Model.GetAnkietaSondazPytaniaBrakOdpowiedzi(ankietaSondazID);

            AnkietaID = ankietaSondazID;
           
            if (!czyWybory)
            {
                if (lPytania1.Count() == 0)
                    this.rptPytania.DataSource = lPytania2;
                else
                    this.rptPytania.DataSource = lPytania1;
                this.rptPytania.DataBind();
                string sVal = "0";
                foreach (RepeaterItem ri in this.rptPytania.Items)
                {

                    if ((ri.Controls[7] as Label) != null)
                    {
                        sVal = (ri.Controls[7] as Label).Text;
                    }

                    if ((ri.Controls[1] as DropDownList) != null)
                    {
                        (ri.Controls[1] as DropDownList).SelectedValue = sVal;
                    }
                }
                if (czyZapisywac) this.btnGlosowanie.Visible = true;
                else this.btnGlosowanie.Visible = false;
              
            }
            else
            {
                
                if (lPytania1.Count() == 0)
                    this.rptWybory.DataSource = lPytania2;
                else
                    this.rptWybory.DataSource = lPytania1;
                this.rptWybory.DataBind();
                string sVal = "0";
                foreach (RepeaterItem ri in this.rptWybory.Items)
                {

                    if ((ri.Controls[7] as Label) != null)
                    {
                        sVal = (ri.Controls[7] as Label).Text;
                    }

                    if ((ri.Controls[1] as DropDownList) != null)
                    {
                        (ri.Controls[1] as DropDownList).SelectedValue = sVal;
                    }
                }
                if (czyZapisywac) this.btnWybory.Visible = true;
                else this.btnWybory.Visible = false;
            }

        }
        public void InitWynikiData(int ankietaSondazID, bool czyAnonimowe, bool czyWybory)// 13,14 wybory
        {

            var lWyniki = Model.GetAnkietaSondazWyniki(ankietaSondazID);

            AnkietaID = ankietaSondazID;


            if (!czyWybory)
            {
                this.rptWyniki.DataSource = lWyniki;
                this.rptWyniki.DataBind();

                string sVal = "0";
                foreach (RepeaterItem ri in this.rptWyniki.Items)
                {

                    if ((ri.Controls[6] as Label) != null)
                    {
                        sVal = (ri.Controls[6] as Label).Text;
                    }


                }
            }
            else
            {
                this.rptWynikiWyborow.DataSource = lWyniki;
                this.rptWynikiWyborow.DataBind();

                string sVal = "0";
                foreach (RepeaterItem ri in this.rptWynikiWyborow.Items)
                {

                    if ((ri.Controls[2] as Label) != null)
                    {
                        sVal = (ri.Controls[2] as Label).Text;
                    }


                }
            }
         
        }

        public void btnGlosowanie_Click(object sender, EventArgs e)
        {
            int j = 0;
            string val="0";
            string pyt;//rptPytania.Items.Count
            int lPyt = this.rptPytania.Items.Count;
           // string [][] lAnkieta=new string[2][lPyt];
            string[] lAnkietaPytania = new string[lPyt];
            string[] lAnkietaOdpowiedzi = new string[lPyt];

            foreach(RepeaterItem ri in this.rptPytania.Items)
            {
                if ((ri.Controls[1] as DropDownList) != null)
                {
                    val = (ri.Controls[1] as DropDownList).SelectedValue;
                    lAnkietaOdpowiedzi[j] = val;
                }
                if ((ri.Controls[5] as Label) != null)
                {
                    pyt = (ri.Controls[5] as Label).Text;
                    lAnkietaPytania[ j] = pyt;
                }
                j++;         
                if (val == "0") //na podstawie lex_Ankietaodpowiedzi
                {
                    komunikatError(-1);
                    return;
                }
            }
             if (Model.InsertUpdateAnkietaOdpowiedz(lAnkietaPytania, lAnkietaOdpowiedzi, int.Parse(Current.OsobaID), AnkietaID) == 1)
            {
                komunikatError(-1);
                return;
            }
        }
        public void btnWybory_Click(object sender, EventArgs e)
        {
            int j = 0;
            int liczba = 0;
            string val = "0";
            string pyt;//rptPytania.Items.Count
            int lPyt = this.rptWybory.Items.Count;
            // string [][] lAnkieta=new string[2][lPyt];
            string[] lAnkietaPytania = new string[lPyt];
            string[] lAnkietaOdpowiedzi = new string[lPyt];
          
            foreach (RepeaterItem ri in this.rptWybory.Items)
            {
                if ((ri.Controls[1] as DropDownList) != null)
                {
                    val = (ri.Controls[1] as DropDownList).SelectedValue;
                    lAnkietaOdpowiedzi[j] = val;
                    if (val == "2") ++liczba; //na podstawie lex_Ankietaodpowiedzi
                }
                if ((ri.Controls[5] as Label) != null)
                {
                    pyt = (ri.Controls[5] as Label).Text;
                    lAnkietaPytania[j] = pyt;
                }
                j++;
              
            }
            if (WyborDokladnie)
            {
                if (liczba != LiczbaWybieranychOsob) //liczba na tak musi = dokładnie
                {
                    komunikatError(-2);
                    return;
                }
            }
            else
            {
                if (liczba > LiczbaWybieranychOsob) //liczba na tak musi <= co najwyżej
                {
                    komunikatError(-3);
                    return;
                }
            }
            if (Model.InsertUpdateAnkietaOdpowiedz(lAnkietaPytania, lAnkietaOdpowiedzi, int.Parse(Current.OsobaID), AnkietaID) == 1)
            {
                komunikatError(-1);
                return;
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {

                     fError.Visible = false;
                     Error1.Visible = false;
                     Error2.Visible = false;
                     Error3.Visible = false;
                    

            if (!this.IsPostBack)
            {
                LiczbaWybieranychOsob = 0;
                hRodzajAnkietySondazu.Value = short.Parse(Request["value"]).ToString();
                hUprawnienia.Value = Current.Uprawnienia;

                CzyWybory = false;
                switch (int.Parse(hRodzajAnkietySondazu.Value))
                {
                    case 0://imienne jednostka
                        lRodzajAnkietySondazu.Text = "Aktualne głosowania imienne w jednostce";
                        break;
                    case 5://anonimowe jednostka
                        lRodzajAnkietySondazu.Text = "Aktualne głosowania anonimowe w jednostce";
                        break;
                 
                    case 1://imienne firma
                        lRodzajAnkietySondazu.Text = "Aktualne głosowania imienne w Firmie";
                        break;
                    case 6://anonimowe firma
                        lRodzajAnkietySondazu.Text = "Aktualne głosowania anonimowe w firmie";
                        break;
                    
                    
                    
                    
                    case 1000:// imienne jednostka
                        lRodzajAnkietySondazu.Text = "W przygotowaniu (data rozpoczęcia > od aktualnej) lub archiwalne (data zakończenia < od aktualnej) głosowania imienne w jednostce";
                        break;

                    case 1005://anonimowe jednostka
                        lRodzajAnkietySondazu.Text = "W przygotowaniu (data rozpoczęcia > od aktualnej) lub archiwalne (data zakończenia < od aktualnej) głosowania anonimowe w jednostce";
                        break;
                   
                  
                    case 1001://imienne firma
                        lRodzajAnkietySondazu.Text = "W przygotowaniu (data rozpoczęcia > od aktualnej) lub archiwalne (data zakończenia < od aktualnej) głosowania imienne w firmie";
                        break;
                    case 1006://anonimowe firma
                        lRodzajAnkietySondazu.Text = "W przygotowaniu (data rozpoczęcia > od aktualnej) lub archiwalne (data zakończenia < od aktualnej) głosowania anonimowe w firmie";
                        break;


                    case 10://wybory anonimowe jednostka
                        lRodzajAnkietySondazu.Text = "Aktualne wybory anonimowe w jednostce";
                        CzyWybory = true;
                        break;
                    case 11://wybory anonimowe firma
                        lRodzajAnkietySondazu.Text = "Aktualne wybory anonimowe w firmie";
                        CzyWybory = true;
                        break;


                    case 1010://wybory anonimowe jednostka
                        lRodzajAnkietySondazu.Text = "W przygotowaniu(data rozpoczęcia > od aktualnej) lub archiwalne (data zakończenia < od aktualnej) wybory anonimowe w jednostce";
                        CzyWybory = true;
                        break;
                    case 1011://wybory anonimowe firma
                        lRodzajAnkietySondazu.Text = "W przygotowaniu(data rozpoczęcia > od aktualnej) lub archiwalne (data zakończenia < od aktualnej) wybory anonimowe w firmie";
                        CzyWybory = true;
                        break;

                  
                    //case 10://wybory jednostka anonimowe dokładnie WJR1_TP
                    //    typAnkietySondazuOd = 101;
                    //    typAnkietySondazuDo = 110;
                    //    break;
                    //case 11://wybory firma anonimowe dokładnie  WFR1_TP
                    //    typAnkietySondazuOd = 111;
                    //    typAnkietySondazuDo = 120;
                    //    break;
                    //case 12://wybory jednostka anonimowe co najwyżej WJC1_TP
                    //    typAnkietySondazuOd = 121;
                    //    typAnkietySondazuDo = 130;
                    //    break;
                    //case 13://wybory firma anonimowe co najwyżej WFC1_TP
                    //    typAnkietySondazuOd = 131;
                    //    typAnkietySondazuDo = 140;
                    //    break;
                    //case 14://wybory jednostka anonimowe dokładnie WJR1_PP
                    //    typAnkietySondazuOd = 141;
                    //    typAnkietySondazuDo = 150;
                    //    break;
                    //case 15://wybory firma anonimowe dokładnie  WFR1_PP
                    //    typAnkietySondazuOd = 151;
                    //    typAnkietySondazuDo = 160;
                    //    break;
                    //case 16://wybory jednostka anonimowe co najwyżej WJC1_PP
                    //    typAnkietySondazuOd = 161;
                    //    typAnkietySondazuDo = 170;
                    //    break;
                    //case 17://wybory firma anonimowe co najwyżej WFC1_PP
                    //    typAnkietySondazuOd = 171;
                    //    typAnkietySondazuDo = 180;
                    //    break;






                }
            
                try
                {
                 dTypAnkiety.Items.Add(new ListItem() { Text = "Wszystkie typy", Value = "0" });

                   foreach (vLex_TypAnkietySondazu typ in Model.GetTypyAnkietySondazu(short.Parse(hRodzajAnkietySondazu.Value)))
                   {
                     dTypAnkiety.Items.Add(new ListItem() { Text = typ.TypAnkietySondazuNazwa+"("+typ.TypAnkietySondazuKod+")", Value = typ.TypAnkietySondazuID.ToString() });
                   }
                  dTypAnkiety.SelectedIndex = 0;               
                }
                catch (Exception ex)
                {
                    //throw new ApplicationException("Brak uprawnien do uruchomienia systemu Pensum. " +
                    //     operacjeF.errorReplace(ex.ToString()));
                }

               
            }
            else
            {
                if (Panel1 == null) return;

                for (int i=0; i<Panel1.Controls.Count;i++)
                {
                    if(Panel1.Controls[i] is DropDownList)
                    {
                        if((Panel1.Controls[i] as DropDownList).SelectedValue==Stale.wybierz)
                        {
                            return;
                        }
                    }
                }

            }
              
        }
        protected void btnPokaz(object sender, EventArgs e)
        {
            int iTemp = int.Parse(((Button)sender).CommandArgument.ToString());
            short iRodzaj = short.Parse(hRodzajAnkietySondazu.Value);
            InitPytaniaData(iTemp, int.Parse(Current.OsobaID), false, CzyWybory);
            iRodzaj = (short)(iRodzaj >= 1000 ? iRodzaj - 1000 : iRodzaj);
            if (iRodzaj >= int.Parse(System.Configuration.ConfigurationManager.AppSettings["RodzajAnkietySondazuDlaWyborowOd"])) //wybory
            //wybory
            {
                LiczbaWybieranychOsob = int.Parse(((Label)((Button)sender).Parent.FindControl("lTypAnkietySondazuKod")).Text.Substring(3, 1));
                WyborDokladnie = ((Label)((Button)sender).Parent.FindControl("lTypAnkietySondazuKod")).Text.Substring(2, 1) == "R";

                tUwagaWybory.Text = (WyborDokladnie ?
                    ((Label)((Button)sender).Parent.FindControl("lTypAnkietySondazuKod")).Text +
                    " - należy wybrać dokładnie osób: " + LiczbaWybieranychOsob.ToString()
                    : ((Label)((Button)sender).Parent.FindControl("lTypAnkietySondazuKod")).Text +
                    " - należy wybrać co najmniej osób: " + LiczbaWybieranychOsob.ToString());
                ClientScript.RegisterStartupScript(typeof(string), "OpenAtStartWybory", "OpenAtStartWybory()", true);

            }


  else
                ClientScript.RegisterStartupScript(typeof(string), "OpenAtStart", "OpenAtStart()", true);


           // InitPytaniaData(int.Parse(((Button)sender).CommandArgument.ToString()), int.Parse(Current.OsobaID), false, CzyWybory);
          //  ClientScript.RegisterStartupScript(typeof(string), "OpenAtStart", "OpenAtStart()", true);
         
        }
       
        protected void btnGlosuj(object sender, EventArgs e)
        {
            int iTemp=int.Parse(((Button)sender).CommandArgument.ToString());
            short iRodzaj = short.Parse(hRodzajAnkietySondazu.Value);
            InitPytaniaData(iTemp, int.Parse(Current.OsobaID), true, CzyWybory);
            iRodzaj =(short)( iRodzaj >= 1000 ? iRodzaj - 1000 : iRodzaj);
            if (iRodzaj >= int.Parse(System.Configuration.ConfigurationManager.AppSettings["RodzajAnkietySondazuDlaWyborowOd"])) //wybory
            {
                //wybory
                LiczbaWybieranychOsob = int.Parse(((Label)((Button)sender).Parent.FindControl("lTypAnkietySondazuKod")).Text.Substring(3, 1));

                WyborDokladnie = ((Label)((Button)sender).Parent.FindControl("lTypAnkietySondazuKod")).Text.Substring(2, 1) == "R";

                tUwagaWybory.Text = (WyborDokladnie?
                    ((Label)((Button)sender).Parent.FindControl("lTypAnkietySondazuKod")).Text +
                    " - należy wybrać dokładnie osób: " + LiczbaWybieranychOsob.ToString()
                    : ((Label)((Button)sender).Parent.FindControl("lTypAnkietySondazuKod")).Text +
                    " - należy wybrać co najmniej osób: " + LiczbaWybieranychOsob.ToString());
                ClientScript.RegisterStartupScript(typeof(string), "OpenAtStartWybory", "OpenAtStartWybory()", true);
            }
            else
                ClientScript.RegisterStartupScript(typeof(string), "OpenAtStart", "OpenAtStart()", true);
         
        }
        protected void btnWyniki(object sender, EventArgs e)
        {

            int iTemp = int.Parse(((Button)sender).CommandArgument.ToString());
            short iRodzaj = short.Parse(hRodzajAnkietySondazu.Value);
            InitPytaniaData(iTemp, int.Parse(Current.OsobaID), false, CzyWybory);

            if (iRodzaj >= int.Parse(System.Configuration.ConfigurationManager.AppSettings["RodzajAnkietySondazuDlaWyborowOd"])) //wybory
            { //wybory
                InitWynikiData(iTemp, true, true);

                LiczbaWybieranychOsob = int.Parse(((Label)((Button)sender).Parent.FindControl("lTypAnkietySondazuKod")).Text.Substring(3, 1));
                tUwagaWynikiWyborow.Text =
                     ((Label)((Button)sender).Parent.FindControl("lAnkietaSondazName")).Text + " - " +
                    ((Label)((Button)sender).Parent.FindControl("lTypAnkietySondazuKod")).Text +
                    " - wybierano osób: " + LiczbaWybieranychOsob.ToString();
              
                ClientScript.RegisterStartupScript(typeof(string), "OpenAtStartWynikiWyborow", "OpenAtStartWynikiWyborow()", true);
          
            
            }
            else
            {
                InitWynikiData(iTemp, true, false);
                ClientScript.RegisterStartupScript(typeof(string), "OpenAtStartWyniki", "OpenAtStartWyniki()", true);
            }
            
            //InitWynikiData(int.Parse(((Button)sender).CommandArgument.ToString()), true);
            //ClientScript.RegisterStartupScript(typeof(string), "OpenAtStartWyniki", "OpenAtStartWyniki()", true);

        }
        //protected void btnWyniki(object sender, EventArgs e)
        //{
        //    InitWynikiData(int.Parse(((Button)sender).CommandArgument.ToString()), true);
        //    ClientScript.RegisterStartupScript(typeof(string), "OpenAtStartWybory", "OpenAtStartWybory()", true);

        //}
        protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
        {

            int ID = int.Parse(((Button)e.Item.FindControl("bGlosuj")).CommandArgument.ToString());
            if (!Model.GetAnkietaSondazCzyGlosowal(int.Parse(Current.OsobaID), ID, Current.Uprawnienia))
            {
                ((Button)e.Item.FindControl("bGlosuj")).ForeColor = System.Drawing.Color.Red;
            }
            else
            {
                //string st = ((Label)e.Item.FindControl("lTypAnkietySondazuKod")).Text.ToString().Substring(1, 1);
                if (((Label)e.Item.FindControl("lTypAnkietySondazuKod")).Text.ToString().Substring(1, 1) == "A")
                    ((Button)e.Item.FindControl("bGlosuj")).Enabled = false;
            }
        }


        protected void lKody_Click(object sender, EventArgs e)
        {
            Server.Transfer("~/Slowniki/TypyGlosowan.aspx");
           

        }
    }
}

